import protoClientHandler
import ProtoMessages

#https://blog.igevin.info/posts/how-to-avoid-python-circle-import-error/ 循环import的处理

#接口定义、处理器的注册都是在这里：

'''
https://docs.python.org/3.6/library/struct.html
常用数据类型格式：
b:1个字节的有符号 int
h:2个字节的有 int
i:4个字节的有符号 int
q:8个字节的有符号 int

无符号的int是以上对应的大写

'''

#处理客户端发送给服务器的接口
# {'fn':userInfo,dt:'hs',toId:10001} fn:处理函数,fmt:接口要读取的数据类型,toIds:[] 处理完客户端发送的消息后要推送的接口id集合
fromClient = {
    '10001':{'fn':protoClientHandler.userInfo,'fmt':'is','toIds':[10002],'cls':ProtoMessages.UserMessage}
}

#处理要推送给客户端的接口
toClient = {
    '10002':{'fn':protoClientHandler.resp_userInf}
}

def getPushInfo(protoId):
    '''
    根据接口id 获取推送信息
    '''
    protoId = str(protoId)
    inf = toClient.get(protoId,None)
    if not inf:
        raise Exception("无法找到id:%s 的处理器."%str(protoId))
    return inf

def getClientInfo(protoId):
    '''
    根据接口id 获取客户端发来的接口信息
    '''    
    protoId = str(protoId)
    inf = fromClient.get(protoId,None)
    if not inf:
        raise Exception("无法找到id:%s 的处理器."%str(protoId))
    return inf